<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class General {

    var $CI;
    var $total_tables = array();

    function General() {
        $this->CI = & get_instance();
        $this->CI->config->load('database_tables');
        $this->total_tables = $this->CI->config->item('dbtables');
    }

    function fec_str_to_ymd($fecha_nom, $fechahoy = false) {
        if ($fecha_nom == '' && $fechahoy) {
            return null;
        }
        if ($fecha_nom == '') {
            $fecha_nom = date("Y-m-d");
        } else {
            $array_fecha = explode("/", $fecha_nom);
            if (isset($array_fecha[1])) {
                $fecha_nom = $array_fecha[2] . $array_fecha[1] . $array_fecha[0];
            } else {
                $array_fecha = explode("-", $fecha_nom);
                $fecha_nom = $array_fecha[2] . $array_fecha[1] . $array_fecha[0];
            }
        }
        return $fecha_nom;
    }

    function fec_ymd_to_str($fecha = null) {
        if ($fecha == null) {
            return null;
        }
        return substr($fecha, 6, 2) . "/" . substr($fecha, 4, 2) . "/" . substr($fecha, 0, 4);
    }

    function fec_str_to_mysql($fecha_nom = '') {

        if ($fecha_nom == '') {
            $fecha_nom = date("Y-m-d");
        } else {
            $array_fecha = explode("/", $fecha_nom);
            if (isset($array_fecha[1])) {
                $fecha_nom = $array_fecha[2] . "-" . $array_fecha[1] . "-" . $array_fecha[0];
            } else {
                $array_fecha = explode("-", $fecha_nom);
                $fecha_nom = $array_fecha[2] . "-" . $array_fecha[1] . "-" . $array_fecha[0];
            }
        }
        return $fecha_nom;
    }

    function fec_mysql_to_str($fechanomina) {
        preg_match("/([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})/", $fechanomina, $mifechalista);
        $lafechalista = $mifechalista[3] . "/" . $mifechalista[2] . "/" . $mifechalista[1];
        return $lafechalista;
    }

    function restar_fechas($fecha1 = '', $fecha2 = '') {
        //calculo timestam de las dos fechas
        $timestamp1 = mktime(0, 0, 0, substr($fecha1, 3, 2), substr($fecha1, 0, 2), substr($fecha1, 6, 4));
        $timestamp2 = mktime(0, 0, 0, substr($fecha2, 3, 2), substr($fecha2, 0, 2), substr($fecha2, 6, 4));
        //resto a una fecha la otra
        $segundos_diferencia = $timestamp2 - $timestamp1;
        //convierto segundos en días
        $dias_diferencia = $segundos_diferencia / (60 * 60 * 24);
        //quito los decimales a los días de diferencia
        $dias_diferencia = ceil($dias_diferencia);
        return $dias_diferencia;
    }

    function sumar_dias($fecha1 = '', $dias = '') {
        //calculo timestam de las dos fechas
        $timestamp1 = mktime(0, 0, 0, substr($fecha1, 3, 2), ((int) substr($fecha1, 0, 2)) + $dias, substr($fecha1, 6, 4));
        $fecha_sumada = date("d-m-Y", $timestamp1);
        return $fecha_sumada;
    }

    function instalar_sql($ruta = null, $reinstalar = false) {
        if (count($this->CI->db->list_tables()) < 5 || $reinstalar) {
            $this->CI->load->language('crud_adm_' . $this->CI->config->item('language'), $this->CI->config->item('language'));
            $contador = 0;
            $this->CI->load->helper('file');
            if (file_exists($ruta)) {
                $this->CI->load->dbforge();
                $tables = $this->CI->db->list_tables();
                foreach ($tables as $table) {
                    $this->CI->dbforge->drop_table($table);
                }
                $bbdd = explode(";", read_file($ruta));
                for ($x = 0; $x < count($bbdd) - 1; $x++) {
                    $cadena = trim($bbdd[$x]);
                    if (!$reinstalar) {
                        $cadena = substr($cadena, strrpos($cadena, "CREATE"), strlen($cadena));
                    }
                    $this->CI->db->query($cadena);
                    if (strrpos($cadena, "CREATE") !== false) {
                        $contador++;
                    }
                    $this->CI->session->set_flashdata('message', sprintf(lang('mensaje_tablas_generales'), $contador));
                }
            }
        }
    }

    function getRealIP() {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {   //check ip from share internet
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {   //to check ip is pass from proxy
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return (String)$ip;
    }

    function insert_ip_visitor($producto){
        $empresa = $this->get_empresa_producto($producto);
        if(!$this->exists_ip($producto) && $empresa != null){
            $data = array(
                'ip_address' => $this->getRealIP(),
                'fk_id_producto' => $producto,
                'fk_id_empresa' => $empresa,
                'fecha' => $this->fec_str_to_mysql()
            );
            $this->CI->db->insert($this->total_tables['visitas_producto'], $data);
        }
    }
    
    function get_empresa_producto($producto){
        $this->CI->db->where('id', $producto);
        $query = $this->CI->db->get($this->total_tables['producto']);
        if($query->num_rows() > 0){
            $row = $query->row_array();
            return $row['fk_id_empresa'];
        }
        return null;
    }
    
    function exists_ip($producto){
        $this->CI->db->where('fk_id_producto', $producto);
        $this->CI->db->where("date_format(fecha, '%Y%m%d') = " . date("Ymd"));
        $query = $this->CI->db->get($this->total_tables['visitas_producto']);
        if($query->num_rows() > 0){
            return true;
        }else{
            return false;
        }
    }
}
?>